package cn.tedu.luban.rocketmq.demo;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;
import org.junit.jupiter.api.Test;

import java.nio.charset.StandardCharsets;

public class MyProducer {

    @Test
    public void sendMessage() throws Exception{
        //1.连接RocketMQ才能发送消息，需要生产者对象
        DefaultMQProducer producer = new DefaultMQProducer();
        //提供RocketMQ连接地址 localhost:9876
        producer.setNamesrvAddr("localhost:9876");
        //order-group cart-group
        producer.setProducerGroup("test-group-01");
        //连接启动 start() 会建立底层连接，如果资源比较紧张，执行比较慢
        //连接还没有建立成功，后续已经进行了消息发送，会出现问题
        producer.start();
        //线程先沉睡5秒

        //2.根据业务 组织消息数据 Message 存放一个字符串
        Message message = new Message();
        String msg="第一条消息";
        byte[] bytes = msg.getBytes(StandardCharsets.UTF_8);
        message.setBody(bytes);
        //主题：消息队列的名称 test-topic-01，当消息发送的时候，如果没有该主题，则自动创建
        message.setTopic("test-topic-01");

        //获取很多信息
        SendResult result = producer.send(message);
        SendStatus sendStatus = result.getSendStatus();
        //负载均衡的计算结果，发送到了哪个broker，哪个队列，哪个主题
        MessageQueue messageQueue = result.getMessageQueue();
        //消息自动生成的ID
        String msgId=result.getMsgId();

        System.out.println("发送结果："+sendStatus);
        System.out.println("路由信息："+messageQueue);
        System.out.println("消息ID："+msgId);

        //4.关闭连接
        producer.shutdown();

    }
}
